package networkbackend;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * @author mleitem This class sends emails and stuff :)
 */
public class EmailClass {

	// ////////////////////////////////
	// send unauthenticated email
	// ////////////////////////////////
	public void SendMessage(String recipients[], String subject,
			String message, String from, String smtp_address)
			throws MessagingException {
		boolean debug = false;

		// Set the host smtp address
		Properties props = new Properties();
		if (smtp_address != "" && smtp_address != null) {
			props.put("mail.smtp.host", smtp_address);
		}
		// create some properties and get the default Session
		Session session = Session.getDefaultInstance(props, null);
		session.setDebug(debug);

		// create a message
		Message msg = new MimeMessage(session);

		// set the from and to address
		InternetAddress addressFrom = new InternetAddress(from);
		msg.setFrom(addressFrom);

		InternetAddress[] addressTo = new InternetAddress[recipients.length];
		for (int i = 0; i < recipients.length; i++) {
			addressTo[i] = new InternetAddress(recipients[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);

		// Optional : You can also set your custom headers in the Email if you
		// Want
		msg.addHeader("MyHeaderName", "myHeaderValue");

		// Setting the Subject and Content Type
		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}

	// ////////////////////////////
	// send authenticated email
	// ////////////////////////////
	public void SendAuthenticatedMessage(String recipients[], String subject,
			String message, String from, String smtp_address, String sUsername,
			String sPassword) throws MessagingException {
		boolean debug = false;

		// Set the host smtp address
		Properties props = new Properties();
		props.put("mail.smtp.host", smtp_address);
		props.put("mail.smtp.auth", "true");

		// Create Authenticator object for session
		JAuthenticate pAuth = new JAuthenticate(sUsername, sPassword);

		// Create a session
		Session session = Session.getInstance(props, pAuth);

		// create some properties and get the default Session
		// Session session = Session.getDefaultInstance(props, null);
		session.setDebug(debug);

		// create a message
		Message msg = new MimeMessage(session);

		// set the from and to address
		InternetAddress addressFrom = new InternetAddress(from);
		msg.setFrom(addressFrom);

		InternetAddress[] addressTo = new InternetAddress[recipients.length];
		for (int i = 0; i < recipients.length; i++) {
			addressTo[i] = new InternetAddress(recipients[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);

		// Optional : You can also set your custom headers in the Email if you
		// Want
		msg.addHeader("MyHeaderName", "myHeaderValue");

		// Setting the Subject and Content Type
		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}

	// ////////////////////////
	// Authenticator Class
	// ////////////////////////
	class JAuthenticate extends Authenticator {

		String sUsername = null;
		String sPassword = null;

		public JAuthenticate(String username, String password) {
			// Assign username and password values passed in data from calling
			// mail connection
			sUsername = username;
			sPassword = password;
		}

		@Override
		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(sUsername, sPassword);
		}
	}

}
